Visual Studio

What comes with it (Desktop App Development for Windows in C++)

  • MSVC Compiler

    • Microsoft Visual C++ Compiler (MSVC) :

      • The default compiler for Visual Studio.

      • Supports modern C++ standards (C++11, C++17, C++20, etc.).

  • MSBuild

    • Tool used to build Visual Studio projects.

    • Responsible for interpreting and executing project files ( .vcxproj ).

  • Windows Tools

    • Windows SDK : Automatically included with Windows development option.

    • Windows Resource Compiler : For working with resource files.

    • Linker : To create PE/COFF binaries used by Windows.

  • Debugger

    • Visual Studio includes a debugger that works with PDBs (Program Database Files) generated by the compiler.

  • C++ Libraries

    • Microsoft C++ Standard Library (STL) :

      • Optimized C++ standard implementation for Windows.

    • ATL (Active Template Library) :

      • For creating COM-based applications.

    • MFC (Microsoft Foundation Classes) :

      • For creating Win32-style graphical interfaces.

  • Graphics Tools

    • Blend for Visual Studio :

      • Used to create graphical interfaces using XAML.

    • DirectX SDK  (now integrated into Windows SDK):

      • For 3D graphics and game development.

  • Integration Tools

    • vcpkg :

      • C++ package manager to download and configure external dependencies.

    • Windows Performance Toolkit :

      • Tool for analyzing performance and resource usage.

File System

New Project
  • Creates

    • .sln

    • .vcxproj

    • .vcxproj.filters

Multiple Projects
Files
  • .sln

    • "Visual Studio Solution".

  • .vcxproj

    • "VC++ Project".

  • .vcxproj.filters

    • "VC++ Project Filters".

    • These are folders that exist in the project, but not in the file system; it's just a file filter for organization.

    • "Virtual organization".

    • ShowAllFiles  is super useful to finally see the actual files.

    • .

  • .vcxproj.user

    • "Per-User Project Options".

    • Current Visual Studio configuration.

Libraries

  • Linking Libraries in Visual Studio .

    • At no point does he explain how to create a library, only how to use one.

    • In the second half of the video, he explains the process.

    • He downloads a folder with binaries and uses only:

      • GLFW\include

        • For the header files.

      • GLFW\lib-vc2015

        • For the static library and/or dynamic library.

        • He uses only the static library.

    • For the header files:

      • Project Settings -> C/C++ -> General -> Additional Include Directories .

        • $(SolutionDir)Dependencies\GLFW\include

    • For the libraries:

      • Project Settings -> Linker -> General -> Additional Library Directories .

        • $(SolutionDir)Dependencies\GLFW\lib-vc2015

      • Project Settings -> Linker -> Input -> Additional Dependencies .

        • glfw3.lib

  • From what I understand, the Linker options in Project Settings do not appear when creating a static library .lib .

Building

  • Sometimes building a Project can cause others to be built, due to:

    • Project Settings -> C/C++ -> General -> Additional Include Directories .

    • or

    • Project Settings -> BuildEvents .

  • This is done automatically due to the "dependency graph" created, where dependencies are always built before the Project.

  • %(AdditionalIncludeDirectories)

  • Thing .

    • He uses Premake, not CMake.

Recommendations

Folders
  • Note :

    • Considering that each Project can have both outputs defined individually, for each configuration and platform, this creates A LOT of confusion when set strangely.

      • Can generate billions of scattered files, making it very confusing to understand where things are and which files are important.

    • I liked the configs below. They helped.

  • Output Directory:

    • $(SolutionDir)out\$(ProjectName)\$(Platform)\$(Configuration)\

  • Intermediate Directory:

    • $(SolutionDir)intermediates\$(ProjectName)\$(Platform)\$(Configuration)\